<script type="text/javascript">
	//123.toString(); 数字能调用toString,经过包装类一层层访问；包装类包装起来是一个对象，对象的最终原型，链的终端是Object.prototype
	//undefined.toString(); undefined是原始值，没有包装类，没有原型，不可能有toString方法，不是对象
	//null.toString(); null不是对象，也没有原型
</script>

<script type="text/javascript">
	var num = 123;
	console.log(num.toString());
</script>

<script type="text/javascript">
	123.toString;//在对象里来说，点是调用方法，但是数学运算里，小数点.优先级最高,系统会识别为浮点型，浮点型后面加字母是不行的，不会优先识别为对象的调用
</script>

<script type="text/javascript">
	var obj = {};
	console.log(obj.toString());//对象调用的toString是Object.prototype上的toString
</script>

数字用方法
<script type="text/javascript">
	var num =123;
	num.toString();//数字没有方法，首先经过包装类包装，new Number(num).toString()
	Number.prototype.toString = function(){};//Number的prototype上有toString方法,不需要找Object的原型上的toString方法.Number上调用的toString是自己重写的方法
	
</script>

方法的重写
<script type="text/javascript">
	Number.prototype.__proto__ = Object.prototype; //Number的prototype上也有原型
	//原型上有的方法toSring，自己又重新写同一个名字不同功能的方法，叫做重写，叫同一个函数的不同重写方式，应用于后端语言java,c++

	Object.prototype.toString = function(){};//继承该方法的Number,Number.prototype继承Object,Number.prototype上也写了一个方法toString,只不过他俩的功能不一样 
</script>

<script type="text/javascript">
	//Object.prototype.toString = function(){};
	Person.prototype = {//和原型链总端一样的方法，但是实现不同功能的东西，叫做方法的重写
		toString : function(){
			return 'hehe'
		}
	}

	function Person(){}
	var person = new Person();
	console.log(person.toString());
</script>

修改系统自带的toString方法
<script type="text/javascript">
	//Object.prototype.toString = function(){//用同样的名字覆盖系统自带的toString方法，也是方法的重写
	//	return 'haha'
	//}
//
	//function Person(){}
	//var person = new Person();
	//console.log(person.toString());
</script>

<script type="text/javascript">
	var num = 123;
	console.log(num.toString());//调用Number的toString，不是Object的toString

	//调用Object的toString
	//call里的123调用Object
	console.log(Object.prototype.toString.call(123));//
	

	//Object.prototype.toString
	//Number.prototype.toString
	//Array.prototype.toString
	//Boolean.prototype.toString
	//String.prototype.toString
	

</script>

可计算的范围，前16位，后16位
<script type="text/javascript">
	console.log(0.14 * 100);//发生精度的偏差，js精度不准，有微小的差距
	Math.ceil(123.1);//向上取整
	Math.floor(123.1);//向下取整
	Math.random();//产生0到1的开区间随机数
</script>

<script type="text/javascript">
	for(var i = 0; i <10; i ++){
		var num = Math.random().toFixed(2) * 100;//产生0到100之间的数，tofix(2)是保留两位小数
		console.log(num);
	}
	//产生精度的误差，不用toFixed,先乘100再取整
	for(var i = 0; i <10; i ++){
		var num = Math.floor(Math.random() * 100);
		console.log(num);//Math.floor取整后没有精度的问题 
	}
</script>